//////////////////////////////////////////////////////////////////////
//
// NO_Value.cpp interface for the NO_Object class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define NO_TAL_EXPORT

//////////////////////////////////////////////////////////////////////////
#include "NO_Externs.h"
#include "NO_Object.h"

//////////////////////////////////////////////////////////////////////////
NO_Value::ObjectSet		NO_Value::objectSet;

//////////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_Value::NO_Value(const NO_Type& type)
:name(0),depend(0),numRef(0),type(type){}

//////////////////////////////////////////////////////////////////////////
NO_Value::~NO_Value()
{
	if(name){delete name;}
	if(depend)		
	{
		if((--(depend->numRef))==0)
		{
			delete depend;
		}
	}
}

//////////////////////////////////////////////////////////////////////////
// retrieve
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
const NO_Type& NO_Value::getType(void){return type;}

//////////////////////////////////////////////////////////////////////////
// modify
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
void NO_Value::setDependent (NO_Value* d)
{
	if(depend){if((--(depend->numRef))==0){delete depend;}}
	depend = d;
	if(d){++(d->numRef);}
}

//////////////////////////////////////////////////////////////////////////
void NO_Value::setName(const std::string& n)
{
	if(!n.empty()){setName(n.c_str());}
}

//////////////////////////////////////////////////////////////////////////
void NO_Value::setName(const NO_Int8* n)
{
	if(n)
	{
		if(!name){name = new std::string(n); return;}
		*name = n;
	}
}
